package offer.medium;

/**
 * 求 1+2+...+n ，要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句（A?B:C）。
 */
public class sumNums {

    public static void main(String[] args) {
        System.out.println(myCode(3));
    }

    /**
     * 就是逻辑运算符的短路性质。
     *
     * 以逻辑运算符 && 为例，对于 A && B 这个表达式，如果 A 表达式返回 \textit{False}False ，那么 A && B 已经确定为 \textit{False}False ，
     * 此时不会去执行表达式 B。同理，对于逻辑运算符 ||， 对于 A || B 这个表达式，如果 A 表达式返回 \textit{True}True ，那么 A || B 已经确定为 \textit{True}True ，此时不会去执行表达式 B。
     *
     * 利用这一特性，我们可以将判断是否为递归的出口看作 A && B 表达式中的 A 部分，递归的主体函数看作 B 部分。如果不是递归出口，则返回 \textit{True}True，并继续执行表达式 B 的部分，否则递归结束。
     * @param n
     * @return
     */
    public static int myCode(int n) {
        boolean b = n > 0 && (n += myCode(n - 1)) > 0;
        return n;
    }
}
